/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.xd.domain.query;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;

/**
 *
 *
 * @author zsp
 * @date 2021-3-12
 */
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class DocumentFlowNewAndModifyQuery {

    private static final int DEFAULT_PAGE_SIZE = 20;
    private static final int MAX_PAGE_SIZE = 1000;

    /**
     * 返回记录的起始位置。
     */
    private Integer offset;

    /**
     * 返回记录的个数。
     */
    private Integer rows;

    /**
     * 流程类型：0-未定义，1-新增流程，2-修订流程，3-作废流程，4-下载审批流程，5-借阅流程
     */
    private List<Integer> flowTypeList;
    /**
     * 阶段：0-未定义
     */
    private String phase;
    /**
     * 是否参加培训：0-否，1-是
     */
    private java.lang.Boolean trainFlag;
    /**
     * 培训人Id
     */
    private java.lang.Long trainerUserId;
    /**
     * 培训签收状态：0-未签收，1-已签收，2-已发起
     */
    private Integer trainCheckStatus;
    /**
     * 租户Id，0表示不指定
     */
    private java.lang.Long tenantId;
    /**
     * 父流程Id
     */
    private Long parentDocumentFlowId;
    /**
     * 批处理类型：0-非批处理，1-批处理父包，2-批处理子文件
     */
    private Integer batchType;

    /**
     * 构建一个查询。
     *
     * @param    pageIndex    页索引
     */
    public DocumentFlowNewAndModifyQuery(Integer pageIndex) {
        this(pageIndex, DEFAULT_PAGE_SIZE);
    }

    /**
     * 构建一个查询。
     *
     * @param    pageIndex    页索引
     * @param    pageSize    页大小
     */
    public DocumentFlowNewAndModifyQuery(Integer pageIndex, Integer pageSize) {
        int index = pageIndex == null ? 0 : pageIndex;
        int size = pageSize == null ? DEFAULT_PAGE_SIZE : pageSize;
        this.offset = index * size;
        this.rows = size;
    }

    /**
     * 构造符合条件的查询对象，仅返回一条
     *
     * @return
     */
    public static DocumentFlowNewAndModifyQueryBuilder one() {
        return DocumentFlowNewAndModifyQuery.builder().offset(0).rows(1);
    }

    /**
     * 构造符合条件的查询对象，控制返回的记录上限
     *
     * @return
     */
    public static DocumentFlowNewAndModifyQueryBuilder max() {
        return DocumentFlowNewAndModifyQuery.builder().offset(0).rows(MAX_PAGE_SIZE);
    }

}
